﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebControls.GaleriaImagenes;
using Data;

namespace Bussiness
{
    public class ControladoraABMNovedad
    {
        private List<IImagen> _lisImagen = new List<IImagen>(); 
        public static List<IImagen> getLisImagenesNovedad(Guid idNovedad)
        {
            using (dbOttado db = new dbOttado())
            {
                List<Imagen> result = (from novedad in db.Novedad
                                       where novedad.id == idNovedad
                                       select novedad.Imagen.FirstOrDefault()).ToList();
                List<IImagen> lisIImagen = new List<IImagen>();
                //lisIImagen.AddRange(result);
                return lisIImagen;
            }
        }

        public static void addNovedad(DateTime fechaPublicacion, DateTime fechaPublicacionInicio, DateTime fechaPublicacionFin, string descripcion, List<Imagen> lisImagen)
        {
            using (dbOttado db = new dbOttado())
            {
                Novedad novedad = new Novedad();
                novedad.id = Guid.NewGuid();
                novedad.fechaCreacion = DateTime.Now;
                novedad.fechaPublicacion = fechaPublicacion;
                novedad.fechaPublicacionInicio = fechaPublicacionInicio;
                novedad.fechaPublicacionFin = fechaPublicacionFin;
                novedad.descripcion = descripcion;
                foreach (Imagen i in lisImagen)
                {
                    db.AttachTo("Imagen", i);
                    novedad.Imagen.Add(i);
                }
                db.AddToNovedad(novedad);
                db.SaveChanges();
            }
        }

        public static Novedad getNovedad(Guid idNovedad)
        {
            using (dbOttado db = new dbOttado())
            {
                var novedad = db.Novedad.Include("Imagen").Where(x => x.id == idNovedad).FirstOrDefault();
                ////var novedad = (from n in db.Novedad.Include("Imagen")
                //               where n.id == idNovedad
                //               select n).FirstOrDefault();
                return novedad;
            }
        }
        public static void deleteNovedad(Guid idNovedad, string descripcion, DateTime fechaPublicacion, DateTime fechaPublicacionInicio, DateTime fechaPublicacionFin, List<Imagen> lisImagen)
        {
            using (dbOttado db = new dbOttado())
            {
                Novedad novedad = db.Novedad.Where(x => x.id == idNovedad).FirstOrDefault();
                db.DeleteObject(novedad);
                db.SaveChanges();
            
            }
        
        }
        public static void updateNovedad(Guid idNovedad, string descripcion, DateTime fechaPublicacion, DateTime fechaPublicacionInicio, DateTime fechaPublicacionFin, List<Imagen> lisImagen)
        {            
            using (dbOttado db = new dbOttado())
            {
                Novedad novedad = db.Novedad.Where(x=>x.id == idNovedad).FirstOrDefault();
                novedad.descripcion = descripcion;
                novedad.fechaPublicacion = fechaPublicacion;
                novedad.fechaPublicacionInicio = fechaPublicacionInicio;
                novedad.fechaPublicacionFin = fechaPublicacionFin;
                List<Imagen> lisImagenToRemove = new List<Imagen>();
                List<Imagen> lisImagenToAdd = new List<Imagen>();
                lisImagenToRemove = (from n in novedad.Imagen
                                     where !(from i in lisImagen select i.id).Contains(n.id)
                                     select n).ToList();
                lisImagenToAdd = (from i in lisImagen
                                     where !(from n in novedad.Imagen select n.id).Contains(i.id)
                                     select i).ToList();
                foreach (Imagen i in lisImagenToAdd)
                {
                    db.Attach(i);
                    novedad.Imagen.Add(i);
                }
                foreach (Imagen i in lisImagenToRemove)
                {
                    novedad.Imagen.Remove(i);
                }
                db.SaveChanges();
            }
        }
    }
}
